package com.lovar.gaming.core.domain;

import com.lovar.gaming.core.util.MessageUtils;

/**
 * 消息代码基类
 *
 * @author Champagne9
 * @date 2024/3/8
 * @template
 */
public interface BaseMessageCode {

    /**
     * 获取消息代码
     * 限制本接口的实现类都必须重写此方法，以便在使用多态时可以获取实现类的消息代码
     */
    String getMessageCode();

    /**
     * 获取消息变量
     * 限制本接口的实现类都必须重写此方法，以便在使用多态时可以获取实现类的消息变量
     */
    Object[] getArgs();

    /**
     * 设置消息变量
     * 限制本接口的实现类都必须重写此方法，以便在使用多态时可以将消息变量设置进实现类中
     */
    BaseMessageCode args(Object... args);

    /**
     * 取出实现类的消息代码，转换为实际消息
     */
    default String toMessage() {
        return MessageUtils.message(this.getMessageCode(), this.getArgs());
    }

}
